In data analytics, many analytic use-cases can be powered by the ability to go back in time (that is, time-travel) and analyze the state of a system at some specific point (or time interval) in the past via a free-form keyword or text search. Characteristics of temporally evolving data include each data record (or item) having a time-invariant attribute serving as a unique primary key, and each data record having multiple attributes. Additionally, each data record can evolve over time into successive versions as a result of a create action (which results in the first version of the given data item), an update action (wherein any of the non-primary attributes are updated, resulting in a new version of the given data item), and/or a delete action (which results in the last version of the given data item). Also, the mutation intervals between successive versions can be arbitrary, and all versions of all data items need to be retained in order to support historical queries at arbitrary points in time in the past.
A query commonly includes a temporal predicate denoting an arbitrary historic time (t), which constrains the query to be evaluated over those versions of data items that are “alive” or “active” versions at time (t). A query can also commonly include additional Lucene™-style search predicates over the structured and/or unstructured attributes of the data items.